/*
    定义一个长度为[16][16]的整型二维数组并随机生成所有位置的元素值(1~100)，分别实现二维数组每行元素的累加和及每列元素的累加和并打印。
    再分别实现二维数组中左上角到右下角和右上角到左下角所有元素的累加和并打印。
 */


public class Random_number_calculate {
    //1.定义一个16*16的int类型数组，并给数组赋值
    int[][] randomNum = new int[16][16];

    //1.创建number方法，给数组赋随机值
    int [][]number(){
        for(int i = 0; i < 16; i++){
            for (int j = 0; j < 16; j++) {
                randomNum[i][j] = (int)(Math.random() * 99 + 1);
            }
        }
        return randomNum;
    }

    //2.计算随机数组每行的累加和
    int [] RowSum(int [][] arr){
        int sum = 0;
        int [] row = new int[16];
        for (int i = 0; i < 16; i++) {
            for (int j = 0; j < 16; j++) {
                sum += arr[i][j];
            }
            row[i] = sum;
            sum = 0;
        }
        return row;
    }
    //3.计算随机数组每列的累加和
    int [] ColumnSum(int [][] arr){
        int sum = 0;
        int [] column = new int[16];
        for (int i = 0; i < 16; i++) {
            for (int j = 0; j < 16; j++) {
                sum += arr[j][i];
            }
            column[i] = sum;
            sum = 0;
        }
        return column;
    }
    //4.计算随机数组左上角到右下角的累加和
    int LeftToRight(int [][] arr){
        int sum = 0;
        //左上角到右下角下标规律为：二维下标i，j数值相等
        for (int i = 0; i < 16; i++) {
            sum += arr[i][i];
        }
        return sum;
    }
    //5.计算随机数组右上角到左下角的累加和
    int RightToLeft(int [][] arr){
        int sum = 0;
        //右上角到左下角下标规律为：i从0到15，且j=15-i
        for (int i = 0; i < 16; i++) {
            int j = 15-i;
            sum += arr[i][j];
        }
        return sum;
    }
    public static void main(String[] args) {

        Random_number_calculate num = new Random_number_calculate();
        //调用方法，得到随机值数组
        int[][]arr = num.number();

        //调用方法，得到随机数组每行的累加和并打印
        int []row = num.RowSum(arr);
        System.out.println("随机数组每行的累加和：");
        for (int i = 0; i < row.length; i++) {
            System.out.print(row[i] + " ");
        }
        System.out.println();

        //调用方法，得到随机数组每列的累加和并打印
        int []column = num.ColumnSum(arr);
        System.out.println("随机数组每列的累加和：");
        for (int i = 0; i < column.length; i++) {
            System.out.print(column[i] + " ");
        }

        //调用方法，得到随机数组从左上角到右下角累加的和并打印
        int leftRight = num.LeftToRight(arr);
        System.out.println("随机数组左上角到右下角的累加和：");
        System.out.println(leftRight);

        //调用方法，得到随机数组从右上角到左下角累加的和并打印
        int rightLeft = num.RightToLeft(arr);
        System.out.println("随机数组左上角到右下角的累加和：");
        System.out.println(rightLeft);
    }
}
